/*
 * Medico.java
 *
 * Created on 19 de Maio de 2007, 17:48
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package pt.iscte.dcti.es.rhplus.utilizador;

import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Hashtable;

import pt.iscte.dcti.es.rhplus.sistema.CodigoPostal;
import pt.iscte.dcti.es.rhplus.sistema.persistencia.AcessoBD;

/**
 * 
 * @author Gustavo Cabral
 * @author Helena Monteiro
 * @author Joao Catarino
 * @author Tiago Moreiras
 */
public class Medico extends Colaborador {

	/** Creates a new instance of Medico */
	public Medico(final int id_pessoa, final String nome, final char sexo, final int bi, final Date data_de_nascimento, final int nif,
			final String email, final int telefone, final int telemovel, final String morada, final String grupo_sanguineo,
			final CodigoPostal codigo_postal, final String nib, final String nss, final Date data_admissao, final double vencimento,
			final Date validade_contrato, final String horario_trabalho, final int numero_de_colaborador, final String especialidade,
			final int id_hospital) {

		super(id_pessoa, nome, sexo, bi, data_de_nascimento, nif, email, telefone, telemovel, morada, grupo_sanguineo, codigo_postal, nib, nss,
				data_admissao, vencimento, validade_contrato, horario_trabalho, numero_de_colaborador, id_hospital);

		this.especialidade = especialidade;
	}

	public String getEspecialidade() {
		return especialidade;
	}

	public String getTipo() {
		return "medico";
	}

	public static Medico devolve(final String username) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("visualizar_colaborador_por_username");
		Hashtable<String, Object> dados_da_pessoa = new Hashtable<String, Object>();
		dados_da_pessoa.put("var_username", username);
		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_pessoa);

		result_set.next();

		int id_codigo_postal = result_set.getInt("id_codigo_postal");

		// Cria o Membro do Agregado e os outros elementos necessarios
		int id_pessoa = result_set.getInt("id_pessoa");
		int id_hospital = result_set.getInt("id_hospital");
		int numero_de_colaborador = result_set.getInt("numero_de_colaborador");
		String nome = result_set.getString("nome");
		char sexo = result_set.getString("sexo").charAt(0);
		int bi = result_set.getInt("bi");
		Date data_de_nascimento = result_set.getDate("data_de_nascimento");
		int nif = result_set.getInt("nif");
		String email = result_set.getString("email");
		int telefone = result_set.getInt("telefone");
		int telemovel = result_set.getInt("telemovel");
		String morada = result_set.getString("morada");
		String grupo_sanguineo = result_set.getString("grupo_sanguineo");
		String nib = result_set.getString("nib");
		String nss = result_set.getString("nss");
		Date data_admissao = result_set.getDate("data_admissao");
		Double vencimento = result_set.getDouble("vencimento");
		Date validade_contrato = result_set.getDate("validade_contrato");
		String horario_trabalho = result_set.getString("horario_trabalho");
		String especialidade = result_set.getString("especialidade");

		acesso_bd.fechaLigacao();

		CodigoPostal codigo_postal = CodigoPostal.devolve(id_codigo_postal);

		Medico medico = new Medico(id_pessoa, nome, sexo, bi, data_de_nascimento, nif, email, telefone, telemovel, morada, grupo_sanguineo,
				codigo_postal, nib, nss, data_admissao, vencimento, validade_contrato, horario_trabalho, numero_de_colaborador, especialidade,
				id_hospital);

		medico.toString();

		return medico;
	}

	public static Medico devolve(final int id_pessoa) throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("visualizar_colaborador_por_id");
		Hashtable<String, Object> dados_da_pessoa = new Hashtable<String, Object>();
		dados_da_pessoa.put("var_id_pessoa", id_pessoa);
		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_pessoa);

		result_set.next();

		int id_codigo_postal = result_set.getInt("id_codigo_postal");

		// Cria o Medico e os outros elementos necessarios
		int numero_de_colaborador = result_set.getInt("numero_de_colaborador");
		String nome = result_set.getString("nome");
		int id_hospital = result_set.getInt("id_hospital");
		char sexo = result_set.getString("sexo").charAt(0);
		int bi = result_set.getInt("bi");
		Date data_de_nascimento = result_set.getDate("data_de_nascimento");
		int nif = result_set.getInt("nif");
		String email = result_set.getString("email");
		int telefone = result_set.getInt("telefone");
		int telemovel = result_set.getInt("telemovel");
		String morada = result_set.getString("morada");
		String grupo_sanguineo = result_set.getString("grupo_sanguineo");
		String nib = result_set.getString("nib");
		String nss = result_set.getString("nss");
		Date data_admissao = result_set.getDate("data_admissao");
		Double vencimento = result_set.getDouble("vencimento");
		Date validade_contrato = result_set.getDate("validade_contrato");
		String horario_trabalho = result_set.getString("horario_trabalho");
		String especialidade = result_set.getString("especialidade");

		acesso_bd.fechaLigacao();

		CodigoPostal codigo_postal = CodigoPostal.devolve(id_codigo_postal);

		Medico medico = new Medico(id_pessoa, nome, sexo, bi, data_de_nascimento, nif, email, telefone, telemovel, morada, grupo_sanguineo,
				codigo_postal, nib, nss, data_admissao, vencimento, validade_contrato, horario_trabalho, numero_de_colaborador, especialidade,
				id_hospital);

		medico.toString();

		return medico;
	}

	public static void insere(final Hashtable<String, Object> tabela_dados_medico) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		Colaborador.insereMedico(tabela_dados_medico);
	}

	public static void altera(final Hashtable<String, Object> dados_colaborador) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {
		Colaborador.alteraMedico(dados_colaborador);
	}

	public Hashtable<String, Object> toHashtable() {
		Hashtable<String, Object> dados_pessoa = super.toHashtable();

		dados_pessoa.put("var_especialidade", this.getEspecialidade());

		return dados_pessoa;
	}

	public void gravaParaBaseDeDados() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
		super.gravaParaBaseDeDados();

		Medico.altera(this.toHashtable());
	}

	private String especialidade;

}